#include<iostream>
using namespace std;
#define maxn 1000000
int trie[31*maxn][2];
int tot;
struct edge{
    int to;
    int w;
};
vector<edge>v[maxn];
void insert(int x){
    int u=0;
    for(int i=1<<30;i>=1;i>>=1){
        int a=x&(i);
        if(!trie[u][a]){
            trie[u][a]=++tot;
        }
        u=trie[u][a];
    }
}
int s[maxn];
void dfs(int now,int fa){
    for(int i=0;i<v[now].size();i++){
        int nxt=v[now][i].to;
        if(nxt!=fa){
            s[nxt]=s[now]^v[now][i].w;
            dfs(nxt,now);
        }
    }
}
void
int main(){
    int n;
    return 0;
}